/**
 * @autor calin
 * @date 2019/12/31 - 22:24
 *
 * 局限：
 * 1.题目的结果几种情况，要用case
 * 2.x除等于2的其他情况未实现，是因为最后的输出要来个循环
 * 3.输入的数组元素可以是所有整数，而此程序考虑的是正整数，用了-1和0
 * 4.没用用Java的一些方法，该程序像是用c语言写的，因为对Java里的一些方法不熟
 */
public class main {
    public static void main(String[] args) {
        int x=2;
        int[] shuzu=new int[]{1,2,3,2,3,1,4,4,8};
        int[] cun=new int[shuzu.length];
        int[] shu=new int[shuzu.length];
        int bw=0;

        if (x<2)//按题目要求，如果不满足要求则输出false
            System.out.println("输出：x输入flase");
        else{
           // System.out.println("x符合要求");
            display(shuzu);//显示输入内容

            if (!isBeishu(shuzu.length,x)){//先来一个快速的判断，不满足此要求，则一票否决
                System.out.println("不符合条件");
            }
            else
            {

                //只遍历一次输入的数组
                for (int i = 0; i < shuzu.length; i++) {
                    if (isinside(cun,i,shuzu)==-1) {//如果不存在
                        cun[i-bw] = shuzu[i];
                        shu[i-bw]++;
                    }else{//若存在
                        shu[isinside(cun,i,shuzu)]++;
                        bw++;

                    }

                }

            }/*
            System.out.println("shu");
           display(shu);
            System.out.println("cun");
            display(cun);
            */
            //在shu数组中检验是否符合要求
            if (isfuhe(shu,x,cun))//如果符合
                System.out.println("输出：true");
            enddisplay(cun);
        }
    }
    //判断某数是否为某数的倍数
    public static Boolean isBeishu(int shu, int bs){
        if(shu%bs==0||shu==0)
            return true;
        else return false;
    }
    //判断sun中前一部分的元素是否都为x的倍数
    public static boolean isfuhe(int sun[],int x,int cun[]){
        int b;
        for ( b = 0; b < sun.length; b++) {
            if (!isBeishu(sun[b],x)){
                break;}
        }
        if (b == cun.length)
            return true;
        else
            return false;
    }
    //输出数组所有元素
    public static void display (int canshu[]){
        String str="输入：[";
        String fuhao=",";
        for (int i = 0; i < canshu.length; i++) {
           str +=canshu[i];
           str +=fuhao;
        }
        System.out.println( str.substring(0,str.length()-1)+"]");
    }

     //判断在cun数组中是否存在下标为i的shuzu数组元素,如果不存在则返回-1，存在则返回在cun数组中的位置
    public static int isinside(int[] cun, int i, int[] shuzu){
        int p=-1;//表示不存在
        for (int a = 0; a <cun.length ; a++) {
            if (shuzu[i]==cun[a]){
                 p=a;//表示存在
                break;}
        }
        if (p!=-1)
            return p;
        else
            return -1;
    }
    //最后的输出
    public static void enddisplay(int canshu[]){
        String str="解释：可行的分组是";
        String fuhao=",";
        String zhi;
        String left="[";
        String right="]";
        for (int i = 0; i < canshu.length; i++) {
            zhi=left+canshu[i]+fuhao+canshu[i]+right+fuhao;
            if(canshu[i]!=0)
            str +=zhi;

        }
        System.out.println( str.substring(0,str.length()-1));
    }

}
